package PenTest.Soluation9;

import java.util.Scanner;


/*
 题目： 过河卒
 1. 动态规划
 2. 马的控制点设置为 0 ， 其他累加即可

 */

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 输入棋盘大小和马的坐标
        int n = in.nextInt();
        int m = in.nextInt();
        int x = in.nextInt();
        int y = in.nextInt();


        // 创建状态转移
        long[][] dp =  new long[n + 2][m + 2];

        // 初始位置
        dp[0][1] = 1;



        for (int i = 1 ; i < n + 2 ; i++) {
            for (int j = 1; j < m + 2 ; j++) {

                // 临时变量
                int x1 = i - 1;
                int y1 = j - 1;
                int flg1 = Math.abs(x1 - x);
                int flg2 =  Math.abs(y1 - y);

                // 进行状态转移
                if (( ( flg1 != 3 && flg2 != 3 && (flg1  + flg2) == 3) || (x1 == x &&
                        y1 == y)) ) {
                    // 判断是否 马位
                    dp[i][j] = 0;
                } else {
                    // 非马位置就统计
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }

        //  
        System.out.println(dp[n + 1][m + 1]);

    }
}


/*
  题目： 买彩票的最好时机(一)
  1. 找出该区间的最小值
  2. 把收益最多的保存即可

 */



// 注意类名必须为 Main, 不要有任何 package xxx 信息
 class Main1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 输入
        int n = in.nextInt();
        int[] prices = new int[n];

        for(int i=0; i < n; i++) {
            // 价格输入
            prices[i] = in.nextInt();
        }

        int min = 100000;
        int earn = 0;
        // 遍历
        for(int i=0; i < n ; i++) {
            int tmp = prices[i] - min;

            // 更新结果
            if(tmp > 0) {
                earn = Math.max(tmp,earn);
            }

            // 更新最小值
            min = Math.min(prices[i],min);
        }


        System.out.println(earn);

    }
}


/*
 题目： 最长回文子串
 1. 中心扩展的思想
 2. 以每个下标向两边扩展
 3. 注意分两种情况
 */


 class Main2 {
    public static void main(String[] args) {
        // 输入
        Scanner in = new Scanner(System.in);
        String str = in.next();

        int len = str.length();

        // 存储最后的结果
        int ret = 0;
        for (int i = 0; i < len; i++) {
            // 开始中心扩展
            ret  = Math.max (ret, foundBackStr1(str, i)) ;
            ret  = Math.max (ret, foundBackStr2(str, i)) ;

        }

        // 输出
        System.out.println(ret);

    }


    public static int foundBackStr1(String str, int mid) {
        // 有中间单独数的情况
        int left = mid, right = mid;
        int ret = 0;
        while (left >= 0 && right < str.length() &&
                str.charAt(left) == str.charAt(right)) {
            // 更新长度
            ret = right - left + 1;

            left--;
            right++;
        }

        return  ret;
    }

    public static int foundBackStr2(String str, int mid) {
        // 没有中间单独数的情况
        int left = mid, right = mid+1;
        int ret = 0;
        while (left >= 0 && right < str.length() &&
                str.charAt(left) == str.charAt(right)) {
            // 更新长度
            ret = right - left + 1;

            left--;
            right++;
        }

        return  ret;
    }
}